package com.hspedu.static_;

/**
 * @Author Stringzhua
 * @Date 2024/3/4 20:04
 * description:类方法也叫静态方法
 * 定义形式如下:
 * 访问修饰符 static 数据返回类型 方法名(){} [推荐]
 * static 访问修饰符 数据返回类型 方法名(){}
 * <p>
 * 类方法的调用:
 * 使用方式:
 * 类名.类方法名
 * 或者
 * 对象名.类方法名 【前提是 满足访问修饰符的访问权限和范围】
 * <p>
 * 【案例】
 * 统计学生学费总和
 */
public class StaticMethod {
    public static void main(String[] args) {
        //创建两个学生对象,交学费
        Stu tom = new Stu("tom");
//        tom.payfee(100);
        Stu.payfee(100);//对的

        Stu marry = new Stu("marry");
//        marry.payfee(200);
        Stu.payfee(200);//对的

        //输出当前的总学费
        Stu.showInfo();

//        Math
        //如果我们不希望创建实例,也可以调用某个方法(即当作工具来使用)
        //这时,把方法做成静态方法是非常合适的
        System.out.println("9开平方的结果是" + Math.sqrt(9));

        System.out.println(MyTools.calSum(10, 30));
    }
}

//开发自己的工具类时,可以将方法做成静态的,方便调用
class MyTools {
    //求出两个数的和
    public static double calSum(double n1, double n2) {
        return n1 + n2;
    }
    //可以写出很多这样的工具方法
}

//学生类
class Stu {
    private String name;//普通成员
    //定义一个静态变量,来累积学生的学费
    private static double fee = 0;

    public Stu(String name) {
        this.name = name;
    }

    //说明
    //1.当方法使用了static修饰后,该方法就是静态方法
    //2.静态方法可以访问静态属性/变量
    //交学费,求和
    public static void payfee(double fee) {
        //累积到静态变量的fee
        Stu.fee += fee;
    }

    public static void showInfo() {
        System.out.println("总学费有:" + Stu.fee);
    }
}